﻿using System;
using System.Net;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

namespace Zorbo.Interface
{
    public interface IClient : INotifyPropertyChanged
    {
        ushort Id { get; }
        Guid Guid { get; }

        ISocket Socket { get; }
        AdminLevel Admin { get; set; }

        uint Cookie { get; }

        bool LoggedIn { get; }
        bool Connected { get; }
        bool LocalHost { get; }
        bool Browsable { get; }
        bool Muzzled { get; set; }
        bool Cloaked { get; set; }
        bool IsCaptcha { get; set; }
        bool FastPing { get; }
        bool Compression { get; }

        byte Age { get; }
        byte Sex { get; }
        byte Country { get; }

        IAvatar Avatar { get; set; }
        IAvatar OrgAvatar { get; }

        string Name { get; set; }
        string OrgName { get; }
        string Version { get; }
        string Region { get; }
        string Message { get; set; }

        ushort Vroom { get; set; }
        ushort FileCount { get; }
        ushort NodePort { get; }
        ushort ListenPort { get; }

        IPAddress NodeIp { get; }
        IPAddress LocalIp { get; }
        IPAddress ExternalIp { get; }

        IPHostEntry DnsEntry { get; }

        IList<String> Ignored { get; }
        IReadOnlyList<ISharedFile> Files { get; }

        IDictionary<String, Object> Extended { get; }

        void Ban();
        void Ban(object state);

        void Disconnect();
        void Disconnect(object state);
    }
}
